#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
int main()
{
	// 子进程   
	pid_t child = fork();
	if (child == 0) {
		int count = 10;
		while (count--) {
			printf("子进程: PID:%d, PPID:%d\n", getpid(), getppid());
			sleep(1);
		}
		exit(0);
	}
	// 父进程      
	int status = 0;
	pid_t parent = waitpid(child, &status, 0);
	if (parent >= 0) {                
		printf("等待子进程退出成功！\n");
		if (WIFEXITED(status)) {                             
			printf("退出码为:%d\n", WEXITSTATUS(status));
		}
		else {                     
			printf("进程收到信号: %d！！！\n", status & 0x7F);
		}
	}
	sleep(2);
	return 0;
}


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main()
{
	// 子进程
	pid_t child = fork();
	if (child == 0) {
		int count = 3;
		while (count--) {
			printf("子进程:%d, PPID:%d\n", getpid(), getppid());
			sleep(3);
		}
		exit(0);
	}
	// 父进程
	while (1) {
		int status = 0;
		pid_t parent = waitpid(child, &status, WNOHANG);
 
		// 当WNOHANG返回大于0的值(就是子进程的PID)，代表子进程退出成功
		if (parent > 0) {
			printf("子进程正常退出成功！！！\n");
			printf("退出码为: %d\n", WEXITSTATUS(status));
			break;
		}
 
		// 当WNOHANG返回0时，代表子进程还未结束
		else if (parent == 0) {
			printf("子进程未结束，父进程进行其他操作中...\n");
			sleep(2);
		}
		else {
			printf("子进程退出错误！！！\n");
			break;
		}
	}
	return 0;
}

